# ifndef __TypesDraw_H_
# define __TypesDraw_H_

# include "Types.h"

	// The default icon for waypoint.
extern HCURSOR g_hcurWaypoint;
	// The hot spot of it.
extern int g_nCursorShiftX_Waypoint, g_nCursorShiftY_Waypoint;

	// The pen for attached tracks.
//extern HPEN g_hpenTrack;

	// The pen & brush used to outline selection.
extern HPEN g_hpenSelection;
extern HBRUSH g_hbrSelection;
extern HBRUSH g_hbrSelectionTransp;

//////////////////////////////////////////

extern HFONT g_hBigFont;
extern HFONT g_hMediumFont;
extern HFONT g_hRotatedFont [];

extern HPEN   g_hpenUnknown;
extern HBRUSH g_hbrUnknown;

extern HBRUSH g_hbrWater;
extern HPEN g_hpenWater;
extern HPEN g_hpenWideWater;
extern HBRUSH g_hbrDryWater;
extern HPEN g_hpenDryWater;
extern HPEN g_hpenCoast;
extern HBRUSH g_hbrGlacier;

extern HBRUSH g_hbrLargeUrbanHousing;
extern HBRUSH g_hbrSmallUrbanHousing;
extern HBRUSH g_hbrRuralHousing;
extern HBRUSH g_hbrUtilities;
extern HBRUSH g_hbrResidentialBuilding;
extern HBRUSH g_hbrOfficeBuilding;
extern HBRUSH g_hbrCommonBuilding;
extern HBRUSH g_hbrIndustrialBuilding;
extern HBRUSH g_hbrIndustrial;
extern HBRUSH g_hbrManMade;
extern HBRUSH g_hbrArterial;
extern HBRUSH g_hbrSquare;
extern HBRUSH g_hbrParkingLot;

extern HBRUSH g_hbrReservation;
extern HBRUSH g_hbrGolf;
extern HBRUSH g_hbrSwamp;
extern HBRUSH g_hbrForest;
extern HBRUSH g_hbrOrchard;
extern HBRUSH g_hbrScrub;
extern HBRUSH g_hbrTundra;
extern HBRUSH g_hbrSandFlat;
extern HBRUSH g_hbrCemetery;
extern HBRUSH g_hbrCityPark;

extern HBRUSH g_hbrForestSwamp;
extern HBRUSH g_hbrForestUndersized;
extern HBRUSH g_hbrForestSparse;
extern HBRUSH g_hbrForestDead;
extern HBRUSH g_hbrForestStumped;
extern HBRUSH g_hbrVineyard;
extern HBRUSH g_hbrRiceField;
extern HBRUSH g_hbrMeadow;
extern HBRUSH g_hbrSand;
extern HBRUSH g_hbrStony;
extern HBRUSH g_hbrSaline;
extern HBRUSH g_hbrReed;
extern HBRUSH g_hbrAlgae;
extern HBRUSH g_hbrThornbush;
extern HBRUSH g_hbrWindFallenTrees;
extern HBRUSH g_hbrElfinWood;
extern HBRUSH g_hbrSaxaul;
extern HBRUSH g_hbrBamboo;
extern HBRUSH g_hbrPalmForest;
extern HBRUSH g_hbrMangroves;
extern HBRUSH g_hbrHighGrass;
extern HBRUSH g_hbrMosses;
extern HBRUSH g_hbrLichens;

extern HPEN g_hpenHighway1;
extern HPEN g_hpenHighway2;
extern HPEN g_hpenPrincipalHw;
extern HPEN g_hpenOtherHw;
extern HPEN g_hpenArterialRoad;
extern HPEN g_hpenCollectorRoad;
extern HPEN g_hpenThinRoad;
extern HPEN g_hpenAlleyway;
extern HPEN g_hpenTunnelRoad;
extern HPEN g_hpenEarthRoad;
extern HPEN g_hpenUnpavedRoad;
extern HPEN g_hpenTrail;
extern HPEN g_hpenPlannedRoute;
extern HPEN g_hpenTrafficLane;
extern HPEN g_hpenForestFirebreak;

extern HPEN g_hpenRailroad1;
extern HPEN g_hpenRailroad2;
extern HPEN g_hpenFerry;
extern HPEN g_hpenTramWay;

extern HPEN g_hpenPipeLine;
extern HPEN g_hpenPowerLine;

extern HPEN g_hpenBoundaryInt1;
extern HPEN g_hpenBoundaryInt2;
extern HPEN g_hpenBoundaryReg1;
extern HPEN g_hpenBoundaryReg2;
extern HPEN g_hpenBoundaryCnt1;
extern HPEN g_hpenBoundaryCnt2;
extern HPEN g_hpenTimeZone;
extern HPEN g_hpenFence;

extern HPEN g_hpenHeight1;
extern HPEN g_hpenHeight2;
extern HPEN g_hpenHeight3;
extern HPEN g_hpenDepth1;
extern HPEN g_hpenDepth2;
extern HPEN g_hpenDepth3;


void InitCommonTypesGDI ();
void DestroyCommonTypesGDI ();

///////////////////////////////////////////////////////

struct rgn_t;

void PreparePointLabel (rgn_t & _rgn);
void DrawLabel (HDC _hDC, const rgn_t & _rgn);

struct label_desc_t {
		// The font and color for labels. NOTE: NULL means default font.
	HFONT *          phFont;
	COLORREF         colText;

		// The function used to prepare object for label output.
	pfPrepareLabel_t pfPrepareLabel;
		// The function used for label output. NOTE: can't be NULL; use DrawLabel for default.
	pfDrawLabel_t    pfDrawLabel;
};

extern label_desc_t g_DefLabel;

	// For points.
extern label_desc_t g_BigCityLabel;
extern label_desc_t g_CityLabel;

extern label_desc_t g_BigRegionLabel;
extern label_desc_t g_RegionLabel;

extern label_desc_t g_DepthSpotLabel;
extern label_desc_t g_ElevSpotLabel;
extern label_desc_t g_FeatureLabel;

	// For polylines.
extern label_desc_t g_RoadLabel;
extern label_desc_t g_LineRiverLabel;
extern label_desc_t g_BoundaryLabel;
extern label_desc_t g_ContourLabel;
extern label_desc_t g_DepthLabel;

	// For polygons.
extern label_desc_t g_CenteredLabel;
extern label_desc_t g_LakeLabel;
extern label_desc_t g_RiverLabel;


# endif // __TypesDraw_H_